package com.sky.config;


import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类：用于创建AliOssUtil对象
 */
@Configuration
@Slf4j // 该注解来自 Lombok，用于自动生成一个名为 'log' 的日志记录器对象（Logger）。该对象可以用于在类中进行日志打印。
public class OssConfiguration {

    /**
     * 通过 Spring 管理对象（即将对象注入到 Spring 容器中），以便在整个应用中可以通过依赖注入获取
     * @param aliOssProperties // 是方法的参数，表示一个包含阿里云 OSS 配置的类（如：endpoint, accessKeyId 等），它会通过 Spring 注入（Dependency Injection）
     * @return AliOssUtil
     */
    @Bean // `@Bean` 注解表示这个方法返回的对象会被注册到 Spring 容器中，作为一个 Bean 管理
    @ConditionalOnMissingBean // 注解表示只有在 Spring 容器中没有该类型的 Bean（即 `AliOssUtil`）时，才会创建并返回新的 `AliOssUtil` 实例。这避免了重复创建相同类型的 Bean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {

        log.info("开始创建阿里云文件上传工具类对象：{}", aliOssProperties);

        // 创建并返回 `AliOssUtil` 实例，构造函数需要传入 OSS 的相关配置信息，这些配置信息来自 `AliOssProperties` 对象。
        return new AliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName()
        );
    }
}
